package org.zalando.stups.fullstop.violation.converter;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.StringUtils;
import javax.persistence.AttributeConverter;
import javax.persistence.Converter;
import java.io.IOException;
import java.util.Collections;
@Converter(autoApply = true)
public class ViolationObjectConverter implements AttributeConverter<Object, String> {
private final ObjectMapper objectMapper = new ObjectMapper();
private final Logger logger = LoggerFactory.getLogger(getClass());
@Override
public String convertToDatabaseColumn(final Object obj) {
if (obj == null) {
return null;
}
try {
return objectMapper.writeValueAsString(obj);
} catch (final JsonProcessingException e) {
logger.info("Could not parse object metadata: {}. The value will be converted as string. Reason: {}", obj, e);
return obj.toString();
}
}
@Override
public Object convertToEntityAttribute(final String value) {
if (StringUtils.hasText(value)) {
try {
return objectMapper.readValue(value, JsonNode.class);
} catch (final IOException e) {
logger.info("Could not parse value metadata: {}. The value will be converted as map. Reason: {}", value, e);
return Collections.singletonMap("data", value);
}
}
return null;
}
}